// 路由鉴权
import router from '@/router'
// 引入pinia
import piniaStore from '@/store'
// 获取用户小仓库
import useUserStore from '@/store/modules/user'
// 引入进度条
import NProgress from 'nprogress'
// 引入进度条样式
import 'nprogress/nprogress.css'

NProgress.configure({
  showSpinner: false,
})

// 全局前置守卫
router.beforeEach(async (to: any, _from: any, next: any) => {
  // 页签标题
  document.title = `${to.meta.title}`

  NProgress.start()

  // 使用用户小仓库
  const userStore = useUserStore(piniaStore)

  // 获取token判断用户是否登录
  const token = userStore.token
  if (token) {
    // 已登录就不能访问登录页了
    if (to.path === '/' || to.path === '/OAuth2Redirect') {
      next('/layout')
    }
    else {
      // 判断路由to match 是否存在
      if (to.matched.length === 0) {
        // 重新调用组装动态菜单
        await userStore.fetchMenuAuthorities()
        // 再进行一次路由，下一次就由动态路由了
        next(to.fullPath)
      }
      else {
        // 如果路由to match 存在就直接放行
        next()
      }
    }
  }
  else {
    // 用户未登录
    if (to.path === '/login' || to.path === '/' || to.path === '/OAuth2Redirect' || to.path === '/consent') {
      next()
    }
    else {
      // 用户访问非登录路由
      next('/OAuth2Redirect')
    }
  }
})

// 全局后置守卫
router.afterEach((_to: any, _from: any) => {
  NProgress.done()
})

// 用户未登录时只能访问登录路由，访问别的所有路由都指向登录路由

// 用户登录之后就不能访问登录路由需要指向首页
